#ifndef __CELDA_H__
#define __CELDA_H__

#include "sdlSurface.h"
#include "sdlButton.h"
#include <string>

#define OFFSETX_INI 0
#define OFFSETY_INI 0

namespace ColorCelda
{
	enum color {rojo, verde, violeta, azul, amarillo};
}

class Celda{
protected:
    sdlButton celda;
    unsigned x;
    unsigned y;
    unsigned offsetX;
    unsigned offsetY;
public:
	//Constructor
	//x e y son la columna y la fila en la matriz
	//los offsets son la posición en la pantalla
	Celda(unsigned x, unsigned y){
		this->x = x;
		this->y = y;
		this->offsetX = OFFSETX_INI;
		this->offsetY = OFFSETY_INI;
	}
	//Carga la imagen de esa Celda
	void cargarImg(const std::string& path){
		this->celda.load(path);
		this->celda.setPosition(x*this->celda.width() + this->offsetX,y*this->celda.height() + this->offsetY);
	}
	//Setea los offsets
	//(actualizando los offsets del boton celda para poder manejar los clicks sobre las celdas)
	void setOffset(unsigned offX, unsigned offY){
		this->offsetX = offX;
		this->offsetY = offY;
		this->celda.setPosition(x*this->celda.width() + this->offsetX,y*this->celda.height() + this->offsetY);
	}
	//Devuelve el ancho de la celda
	int width(){
		return this->celda.width();
	}
	//Devuelve el alto de la celda
	int height(){
		return this->celda.height();
	}
	//Recibe la superficie donde va a dibujar y dibuja la celda en la posición relativa a esa superficie,
	//es decir, la celda que está en 0,0 se dibuja en 0,0 mientras que la celda que está en 2,3
	//(si la imagen de la celda fuera de 50x50) se dibuja en 100,150.
	virtual void dibujar(sdlSurface& surface){
		int posX = x*this->celda.width();
		int posY = y*this->celda.height();
		surface.applySurface(posX,posY,this->celda);
	}
	//Setea la posición relatiba al tablero
	void setXY(unsigned x, unsigned y){
		this->x = x;
		this->y = y;
	}
	//Guarda en x e y la pocisión relativa al tablero
	void getXY(unsigned& x, unsigned& y){
		x = this->x;
		y = this->y;
	}
	//Método virtual abstracto que define el comportamiento de las distintas celdas
	virtual bool wasClicked(const SDL_Event&) = 0;
	virtual ~Celda(){}
};

#endif // __CELDA_H__
